package com.designpattern.proxy;

import java.lang.reflect.Proxy;
import java.util.LinkedList;
import java.util.List;

public class Main {

	public static void main(String[] args){
		Subject sb = new RealSubject();
		/**
		 * 该方法返回一个代理对象（动态生成一个class byte，该class继承了Proxy，并实现了Class[]指定的接口。
		 * 利用指定的classloader将 class byte加载进系统），
		 * 由于该对象实现了subject接口，故可以强转为subject。 （动态操作字节码+反射原理）
		 * 
		 */

		Subject proxySubject = (Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[]{Subject.class},
				new ProxyHandler(sb));
		proxySubject.doSomething();
	}
}
